#!/usr/bin/env python
# coding: utf-8

# In[57]:


import pandas as pd
import matplotlib.pyplot as plt
import numpy as np


# In[ ]:


df=pd.read('./log.txt',header=None,sep='\t')
df.header()
df.columns=['id','api','count','res_time_sum','res_time_min','res_time_max','res_time_avg','interval','created_at']
df.sample(5)#随机采样，多次执行
de.info()#查看磁盘占用
df=df.drop('api',axis=1) #优化内存，指定删除一列
df.index=pd.to_datetime(df.created_at)
df.drop(['id','interval'],axis=1)
df['count'].hist(bins=30)
df['2019-5-1']['count'].plot()
plt.show()
df2=df['2019-5-1']
df2=df2[['count']].resample('1H').mean()
df2['count'].plot()
plt.show()
df2['count'].plot(kind='bar')
plt.xticks(rotation=60) #文字旋转角度
plt.show()


# In[ ]:


# 分析有没有异常时段，访问接口过于频繁，可能就是黑客攻击
df['2019-5-1'][['count']].boxplot(showmeans=True,meanline=True)
plt.show()


# In[ ]:


df[['count']>20]


# In[ ]:


# 某一天的响应时间，平均响应时间
df['2019-5-1'][['res_time_avg']].boxplot()


# In[ ]:


df2=df['2019-5-1']
df2[df['res_time_avg']>1000]


# In[ ]:


data=df['2019-5-1'].resample('20T').mean()
data[['res_time_sum','res_time_min','res_time_max','res_time_avg']].plot()
plt.show()


# In[58]:


# 业务高峰时段 下午2-3点 晚上7-8点 响应时间


# In[ ]:


df['2019-5-1':'2019-5-10']['count'].plot()
plt.show()


# In[ ]:


# 每天的情况都差不多
df['2019-5-2'].index.weekday # 0代表星期一，以此类推
df['weekday']=df.index.weekday
df.head(2)


# In[ ]:


# 判断是否是周末，是不是5，6
df['weekend']=df['weekday'].isin({5,6})
df.head(5)


# In[ ]:


# 对weekend进行分组，对count列求平均值
df.groupby('weekend')['count'].mean()


# In[ ]:


#周末调用平均次数多
#周末哪个时段调用次数比较多

df.groupby('weekend',df.index.hour)['count'].mean()


# In[ ]:


# 周末和非周末具体时间对比，绘制成图形，否则不直观
df.groupby('weekend',df.index.hour)['count'].mean().plot()
plt.show()


# In[ ]:


# 周末和非周末数据叠加
df.groupby(['weekend',df.index.hour])['count'].mean().unstack(level=0).plot()
plt.show()


# In[ ]:




